package Servlets;

import Buscador.Buscador;
import Datos.Tema;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Iterator;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * Servlet que procesa la petición de un cliente, buscando en la BD los temas
 * que se ajusten a la petición.
 *
 * @author Mikel&Igor
 */
public class ListadoTemas extends HttpServlet {

    @Override
    public void doPost(HttpServletRequest req, HttpServletResponse res)
            throws ServletException,IOException
    {
        String consulta; //Consulta del usuario
        ArrayList<Tema> list; //Lista de temas obtenidos

        //Si no viene del formulario, redireccionamos al índice
        if(req.getParameter("submit")==null || req.getParameter("consulta").equals(""))
            res.sendRedirect("./index.jsp");
        else
        {
            //Leer POST
            consulta=(String)req.getParameter("consulta");
            consulta=Indexador.FuncionesTexto.minusculaSinAcento(consulta);

            //Tipo de la respuesta
            res.setContentType("text/html");
            PrintWriter out = res.getWriter();

            //Cabeceras HTML
            out.println("<html>\n"+"<head>\n");
            out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">\n");

            //Título de la página
            out.println("<title>"+consulta+"</title>\n");

            //CSS
            out.println("<style type='text/css'>\n");
            out.println("\th1.title{\n\t\tcolor: green;\n\t\ttext-align: left;\n\t\tfont-size: 25px;\n\t}");
            out.println("\t.main {\n\t\theight: 500px;\n\t\twidth: 700px;\n\t\tmargin: auto;\n\t}");
            out.println("\t.text {\n\t\twidth:300px;\n\t}");
            out.println("\t.tema {\n\t\tfont-size:14;\n\t\ttext-align: center;\n\t}");
            out.println("\t.foro {\n\t\tfont-size:10px;\n\t\tcolor: gray;\n\t}");
            out.println("\th2{\n\t\ttext-align: center\n\t\tfont-size: 20px;\n\t}");
            out.println("\t.logo{\n\t\ttext-decoration: none;\n\t}");
            out.println("\tp.sang {\n\t\ttext-indent: 50px;\n\t}");
            out.println("</style>\n</head>\n\n");

            //Body
            out.println("<body>\n\t<div class=\"main\">\n");
            //out.println("\t\t<a class=\"logo\" href=\"./index.jsp\"><h1 class=\"title\">LINKZ</h1></a>\n");

            out.println("\t\t<a class=\"logo\" href=\"./index.jsp\"><img src=\"Linkz-small.png\" alt=\"Linkz\"/></a>\n");

            out.println("\t\t<form action=\"./lista\" method=\"POST\">\n");

            //En el cuadro de texto metemos lo que el ha escrito
            out.println("\t\t\t<input type=\"text\" name=\"consulta\" value=\""+consulta+"\" class=\"text\" align=\"center\"></input>\n");
            out.println("\t\t\t<input type=\"submit\" name=\"submit\" value=\"Buscar!\"></input>\n</form>\n");

            out.println("\t\t<br><br>\n");

            //Título de la búsqueda
            out.println("\t\t<h2>"+consulta+"</h2>\n<br><br>\n");

            //Petición al buscador
            Buscador b = new Buscador();
            list=b.pedirBusqueda(consulta);

            if(list!=null) //Si ha habido resultados
            {
                muestraTemas(out, list,consulta);

                //Lo almacena en el contexto para usarlo al mostrar el tema
                ServletContext context= getServletContext();
                context.setAttribute("list", list);
            }
            else
                muestraError(out);

            out.println("\t</div>\n</body>\n</html>");
        }
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        //Redireccionar, ya que solo queremos que llegue hasta aquí desde el formulario
        res.sendRedirect("./index.jsp");
    }


    /**
     * Función que se encarga de mostrar los temas
     * @param out Por donde van a mostrarse
     * @param list La lista de temas a consultar
     * @param consulta La consulta que se ha realizado.
     */
    public void muestraTemas(PrintWriter out, ArrayList<Tema> list, String consulta)
    {
        Iterator<Tema> it=list.iterator();
        Tema tema;
        int i=0;

        while(it.hasNext()) //Mentras queden temas los mostramos
        {
            tema=it.next();
            if (tema.getGdList().isEmpty()) {
                //En el enlace pasamos el id del tema (posición en el array) y la consulta que ha hecho
                out.println("\t\t<p>"+tema.getTituloGeneral()+"\t<b>("+tema.getGdList().size()+" descargas)</b></p>\n");
                out.println("\t\t<p class=\"sang\"><a class=\"foro\" href=\""+tema.getURL()+"\">"+tema.getURL()+"</a></p>\n");
                out.println("\t\t<br>");
            }
            else {
                //En el enlace pasamos el id del tema (posición en el array) y la consulta que ha hecho
                out.println("\t\t<a class=\"tema\" href=\"./tema?tema="+consulta+"&id="+i+"\">"+tema.getTituloGeneral()+"</a><b>\t("+tema.getGdList().size()+" descargas)</b><br>\n");
                out.println("\t\t<p class=\"sang\"><a class=\"foro\" href=\""+tema.getURL()+"\">"+tema.getURL()+"</a></p>\n");
                out.println("\t\t<br>");
            }

            i++;
        }
    }
    /**
     * Muestra el mensaje de error
     * @param out Por donde se escribe el mensaje
     */
    public void muestraError(PrintWriter out)
    {
        out.println("\t\t<p>No se han encontrado resultados</p>");
    }
}
